<?php 
class Mama {
    
    
/**
     * Create a new callback
     * 
     * @param    string    $fun function to callback
     * @param    array    $args parameters to be passed to the callback
     * @return    Closure
     */
    
public static function bild1($fun, $args = array())
    {
        
// Outside get_called_class()
        
$called_class = get_called_class();
        
        return function() use (
$fun, $args, $called_class) {
            return 
call_user_func_array(array($called_class, $fun), $args);
        };
    }
    
    
/**
     * Create a new callback
     * 
     * @param    string    $fun function to callback
     * @param    array    $args parameters to be passed to the callback
     * @return    Closure
     */
    
public static function bild2($fun, $args = array())
    {
        return function() use (
$fun, $args) {
            
// Inside get_called_class()
            
$called_class = get_called_class();
            return 
call_user_func_array(array($called_class, $fun), $args);
        };
    }
    
    
/**
     * Print something for demonstration
     * 
     * @return void
     */
    
public static function print_something()
    {
        echo 
"I told'ya!" . PHP_EOL;
    }
}

class 
Lama extends Mama {

    
/**
     * Print something for demonstration
     * 
     * @return void
     */
    
public static function print_something()
    {
        echo 
"Lama lo?" . PHP_EOL;
    }
}

$bild1 = Lama::bild1("print_something");
    
$bild1(); // "Lama lo?"
$bild2 = Lama::bild2("print_something");
    
$bild2(); // "I told'ya!"
1